2核2G的机器,除了FULL GC 其他时候cpu使用率不到10%
full GC超过2秒,大概率会导致当机,阿里云便宜服务不建议开swap,只要用到swap就会当机

  • jcmd
    • jcmd [pid] VM.flags 查看当前已经设置的vm参数
    • jcmd 还有很多很多命令
  • 经研究添加参数如下
	-Xlog:gc*:gc.log:time:filesize=100m:filecount=2
	-XX:ConcGCThreads=2 -XX:G1HeapWastePercent=12  -XX:MaxGCPauseMillis=10  -XX:InitiatingHeapOccupancyPercent=30 
	-XX:G1PeriodicGCInterval=500  -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=40
	-XX:MaxDirectMemorySize=64m -Xms384m  -Xmx1024m  -XX:MetaspaceSize=1m  -XX:MaxMetaspaceSize=192m 
  • 日志相关
    • Xlog:gc*:gc.log:time:filesize=100m:filecount=2
    • 表示打印gc* 表示GC详细日志,gc.log是输出的文件,filesize是文件最大大小,filecount是最多保留文件数,gc.log.0,gc.log.1
  • 回收效率相关
    • ConcGCThreads 标记线程,默认2核只有1个,这里改为2
    • InitiatingHeapOccupancyPercent 新老混合回收时机,老年代占堆大小的比例,默认45%
    • G1HeapWastePercent 混合回收整理出来的空闲空间占heap的5%时(默认值),终止本次回收,加到12
    • MaxGCPauseMillis 最大停顿时间,默认200,这里改为100
      • 从GC日志上看,效果是当有一次GC时间大于100ms的值后,后面的GC就比前面更频繁
      • 同时还有一个等效参数 -XX:GCTimeRatio=n,表示最大可以使用1/n 的时间来用于GC,没有MaxGCPauseMillis好理解
  • 定期垃圾收集
    • G1PeriodicGCInterval 500ms内如果没有触发垃圾回收就做一次定期回收
    • G1PeriodicGCSystemLoadThreshold 定期回收时系统负载最小比例,超过这个比例不进行定期回收
    • MinHeapFreeRatio/MaxHeapFreeRatio 空闲内存最小/最大 百分比,默认值 40/70,设置小可以更快的归还内存给系统
  • 内存大小相关
    • MaxDirectMemorySize:最大直接内存
    • Xms 初始堆大小
    • Xmx 最大堆大小
    • MetaspaceSize 初始元空间大小
      • 144m为加载类总数:21724时间占用值,主要避免启动时频繁FULL GC
    • MaxMetaspaceSize 元空间最大值
      • 不建议低于192m

一些有用的参考

很多网上搜到的参考是没用的